package com.jdbc_.Apache_Druid;

import com.jdbc_.datasource.JDBCUtilsByDruid;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.jupiter.api.Test;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

// 使用Apache的DBUtils工具类+Druid数据库连接池，完成对表actor的增加
public class DBUtils_USE {
    @Test
    // 返回结果是多行数据的情况
    public void testQueryMany() throws SQLException {
        // 1、获取连接（Druid）
        Connection connection = JDBCUtilsByDruid.getConnection();

        // 2、创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner();
        // 3、就可以执行相关方法，返回的结果是ArrayList集合，我用List来接受
        String sql = "select * from actor where id>=?";
        /*
            解读：
            query()方法就是执行SQL语句，得到 结果集resultSet  ---封装到--->  ArrayList集合中
            （2）返回ArrayList集合
            （3）new BeanListHandler(Actor.class)：将结果集中的每一行数据都封装到一个对应的JavaBean实例中
                （即封装到Actor类的实例中），再存放到List里。
                其底层使用 反射机制 获取Actor的属性，然后进行封装
            （4）  1就是给sql语句中的?赋值，可以有多个参数，它是可变参数Object... param
         */

        // 底层得到的resultSet会在query关闭，同时，底层还会关闭preparedStatement
        List<Actor> lists = queryRunner.query(connection, sql, new BeanListHandler<Actor>(Actor.class), 1);

        System.out.println("输出集合的对象");
        for (Actor actor : lists) {
            System.out.print(actor);
        }

        // 4、关闭连接
        JDBCUtilsByDruid.close(null, null, connection);
    }
}
